From c40e5a13c72f8f71679b70212a1e294e23188a65 Mon Sep 17 00:00:00 2001 From: robertl Date: Tue, 28 Jul 2009 16:41:38 +0000 Subject: [PATCH] Improve Garmin GPI reader to read the more GPI files. --- garmin_gpi.c | 45 +++- reference/umsonstdraussen.gpi | Bin 0 -> 33593 bytes reference/umsonstdraussen.gpx | 478 ++++++++++++++++++++++++++++++++++ testo | 4 + 4 files changed, 523 insertions(+), 4 deletions(-) create mode 100644 reference/umsonstdraussen.gpi create mode 100644 reference/umsonstdraussen.gpx diff --git a/garmin_gpi.c b/garmin_gpi.c index 2918dbf1f..f905ac2a7 100644 --- a/garmin_gpi.c +++ b/garmin_gpi.c @@ -176,7 +176,7 @@ typedef struct { } gpi_waypt_t; static gbfile *fin, *fout; -static gbint32 codepage; /* code-page, i.e. 1252 */ +static gbint16 codepage; /* code-page, i.e. 1252 */ static reader_data_t *rdata; static writer_data_t *wdata; static short_handle short_h; @@ -290,8 +290,16 @@ read_header(void) len = gbfgetint16(fin); gbfseek(fin, len, SEEK_CUR); /* "my.gpi" */ - (void) gbfgetint32(fin); /* 1 */ + i = gbfgetint32(fin); /* 1 */ (void) gbfgetint32(fin); /* 12 */ + /* There are two dwords next. On most typical files, they're + * "1" and "12". On files from garminoneline.de/extras/poi, the + * next two words are "15" and "5" and there's 17 additional bytes + * that I can't identify. So hardcode a seek here for now. + */ + if (i == 15) { + gbfseek(fin, 17, SEEK_CUR); + } gbfread(&rdata->POI, 1, sizeof(rdata->POI) - 1, fin); if (strcmp(rdata->POI, "POI") != 0) @@ -300,7 +308,9 @@ read_header(void) for (i = 0; i < 3; i++) (void)gbfgetc(fin); gbfread(&rdata->S8, 1, sizeof(rdata->S8) - 1, fin); - codepage = gbfgetint32(fin); + codepage = gbfgetint16(fin); + (void) gbfgetint16(fin); /* typically 0, but 0x11 in + Garminonline.de files. */ #ifdef GPI_DBG PP; @@ -562,6 +572,32 @@ read_tag(const char *caller, const int tag, waypoint *wpt) case 0x80012: /* ? sounds / images ? */ break; + case 0x11: + case 0xb: + case 0xc: + /* appears to be web links. If the first 16 bit + value is 0x10, the remainder is a length/URL pair. + if it's 0x19, there is a length/phone # (?) pair followed + by a length/URL pair. + */ + case 0x80007: + /* Looks like some kind of calendar information. */ + +#ifdef GPI_DBG + { + int x; + char *b = xmalloc(sz); + fprintf(stderr, "Tag: %x\n", tag); + gbfread(b, 1, sz, fin); + fprintf(stderr, "\n"); + for (x = 0; x < sz; x++) + fprintf(stderr, "%02x ", b[x]); + fprintf(stderr, "\n"); + for (x = 0; x < sz; x++) + fprintf(stderr, "%c", isalnum(b[x]) ? b[x] : '.'); + } +#endif GPI_DBG + break; default: warning(MYNAME ": Unknown tag (0x%x). Please report!\n", tag); return 0; @@ -997,7 +1033,8 @@ write_header(void) gbfputc(0, fout); gbfputc(0, fout); gbfwrite("00", 1, 2, fout); - gbfputint32(codepage, fout); + gbfputint16(codepage, fout); + gbfputint16(0, fout); } diff --git a/reference/umsonstdraussen.gpi b/reference/umsonstdraussen.gpi new file mode 100644 index 0000000000000000000000000000000000000000..de6f9b6e6263638e3ca9c193618400a7fef3710d GIT binary patch literal 33593 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 literal 0 HcmV?d00001 diff --git a/reference/umsonstdraussen.gpx b/reference/umsonstdraussen.gpx new file mode 100644 index 000000000..9d920f04d --- /dev/null +++ b/reference/umsonstdraussen.gpx @@ -0,0 +1,478 @@ + + + + + + Uferlos Festival + Uferlos Festival + Uferlos Festival + Waypoint + + + Schlossgrabenfest + Schlossgrabenfest + Schlossgrabenfest + Waypoint + + + Kultival + Kultival + Kultival + Waypoint + + + Hafengeburtstag Hamburg + Hafengeburtstag Hamburg + Hafengeburtstag Hamburg + Waypoint + + + EselRock + EselRock + EselRock + Waypoint + + + EuroCityFest Münster + EuroCityFest Münster + EuroCityFest Münster + Waypoint + + + Wispa Festival + Wispa Festival + Wispa Festival + Waypoint + + + Umsonst + Draußen Würzburg + Umsonst + Draußen Würzburg + Umsonst + Draußen Würzburg + Waypoint + + + Umsonst + Draußen Bad Kissingen + Umsonst + Draußen Bad Kissingen + Umsonst + Draußen Bad Kissingen + Waypoint + + + Teichrock + Teichrock + Teichrock + Waypoint + + + Spreehafenfestival + Spreehafenfestival + Spreehafenfestival + Waypoint + + + Rohrer Seefest + Rohrer Seefest + Rohrer Seefest + Waypoint + + + Rock die Heide + Rock die Heide + Rock die Heide + Waypoint + + + Rock and Bike + Rock and Bike + Rock and Bike + Waypoint + + + RACT Festival + RACT Festival + RACT Festival + Waypoint + + + Polterplatz Open Air + Polterplatz Open Air + Polterplatz Open Air + Waypoint + + + Parkpop + Parkpop + Parkpop + Waypoint + + + Open Air Werden + Open Air Werden + Open Air Werden + Waypoint + + + Open Doors Festivals + Open Doors Festivals + Open Doors Festivals + Waypoint + + + Happiness + Happiness + Happiness + Waypoint + + + Hafenfest Hamm + Hafenfest Hamm + Hafenfest Hamm + Waypoint + + + Free for All + Free for All + Free for All + Waypoint + + + Friedensfestival + Friedensfestival + Friedensfestival + Waypoint + + + Das Fest Karlsruhe + Das Fest Karlsruhe + Das Fest Karlsruhe + Waypoint + + + Donauinselfest + Donauinselfest + Donauinselfest + Waypoint + + + Backnanger Nachwuchsfestival + Backnanger Nachwuchsfestival + Backnanger Nachwuchsfestival + Waypoint + + + Abifestival + Abifestival + Abifestival + Waypoint + + + Weinlabyrinth + Weinlabyrinth + Weinlabyrinth + Waypoint + + + Waldstock + Waldstock + Waldstock + Waypoint + + + Umsonst + Draußen Mössingen + Umsonst + Draußen Mössingen + Umsonst + Draußen Mössingen + Waypoint + + + Umsonst + Draußen Vlotho + Umsonst + Draußen Vlotho + Umsonst + Draußen Vlotho + Waypoint + + + Umsonst + Draußen Lindau + Umsonst + Draußen Lindau + Umsonst + Draußen Lindau + Waypoint + + + Umsonst + Draußen Karlstadt + Umsonst + Draußen Karlstadt + Umsonst + Draußen Karlstadt + Waypoint + + + Umsonst + Draußen Heubach + Umsonst + Draußen Heubach + Umsonst + Draußen Heubach + Waypoint + + + Sinnflutfestival + Sinnflutfestival + Sinnflutfestival + Waypoint + + + Südwinsen Festival + Südwinsen Festival + Südwinsen Festival + Waypoint + + + Rocktreff + Rocktreff + Rocktreff + Waypoint + + + Rheinkultur + Rheinkultur + Rheinkultur + Waypoint + + + Open Air am Garchinger See + Open Air am Garchinger See + Open Air am Garchinger See + Waypoint + + + Obstwiesenfestival + Obstwiesenfestival + Obstwiesenfestival + Waypoint + + + Live at Plaza + Live at Plaza + Live at Plaza + Waypoint + + + KuRt Festival + KuRt Festival + KuRt Festival + Waypoint + + + HORST Festival + HORST Festival + HORST Festival + Waypoint + + + Go Ahead Weekend + Go Ahead Weekend + Go Ahead Weekend + Waypoint + + + Flörsheimer Open Air + Flörsheimer Open Air + Flörsheimer Open Air + Waypoint + + + Frequenzen Festival + Frequenzen Festival + Frequenzen Festival + Waypoint + + + Bardentreffen + Bardentreffen + Bardentreffen + Waypoint + + + Bayerisches Jazzweekend + Bayerisches Jazzweekend + Bayerisches Jazzweekend + Waypoint + + + Bochum Total + Bochum Total + Bochum Total + Waypoint + + + 48er Festival + 48er Festival + 48er Festival + Waypoint + + + Umsonst + Draußen Mössingen + Umsonst + Draußen Mössingen + Umsonst + Draußen Mössingen + Waypoint + + + Umsonst + Draußen Vlotho + Umsonst + Draußen Vlotho + Umsonst + Draußen Vlotho + Waypoint + + + Sinnflutfestival + Sinnflutfestival + Sinnflutfestival + Waypoint + + + Wutzrock Festival + Wutzrock Festival + Wutzrock Festival + Waypoint + + + Wutzdog Festival + Wutzdog Festival + Wutzdog Festival + Waypoint + + + Welt Astra Tag + Welt Astra Tag + Welt Astra Tag + Waypoint + + + Umsonst + Draußen Stuttgart + Umsonst + Draußen Stuttgart + Umsonst + Draußen Stuttgart + Waypoint + + + TeteRock Festival + TeteRock Festival + TeteRock Festival + Waypoint + + + Stemweder Openair Festival + Stemweder Openair Festival + Stemweder Openair Festival + Waypoint + + + Staatsforsten Open Air + Staatsforsten Open Air + Staatsforsten Open Air + Waypoint + + + Sommerschein Festival + Sommerschein Festival + Sommerschein Festival + Waypoint + + + Sommerfühl + Sommerfühl + Sommerfühl + Waypoint + + + Rockfield Open Air + Rockfield Open Air + Rockfield Open Air + Waypoint + + + Römersee Open Air + Römersee Open Air + Römersee Open Air + Waypoint + + + Olgas Rock Festival + Olgas Rock Festival + Olgas Rock Festival + Waypoint + + + Midsummer Open Air + Midsummer Open Air + Midsummer Open Air + Waypoint + + + Live im Schlossgarten + Live im Schlossgarten + Live im Schlossgarten + Waypoint + + + Holter Meeting + Holter Meeting + Holter Meeting + Waypoint + + + Gogenkrog Open-Air + Gogenkrog Open-Air + Gogenkrog Open-Air + Waypoint + + + Fest der leisen Tönen + Fest der leisen Tönen + Fest der leisen Tönen + Waypoint + + + Folklorefest Krefeld + Folklorefest Krefeld + Folklorefest Krefeld + Waypoint + + + Essen Original + Essen Original + Essen Original + Waypoint + + + Open Air Folksfest + Open Air Folksfest + Open Air Folksfest + Waypoint + + + Open Ernstival + Open Ernstival + Open Ernstival + Waypoint + + + Karneval der Kulturen Hamburg + Karneval der Kulturen Hamburg + Karneval der Kulturen Hamburg + Waypoint + + + Fehmarn Open Air + Fehmarn Open Air + Fehmarn Open Air + Waypoint + + + Eber-Hart Open Air + Eber-Hart Open Air + Eber-Hart Open Air + Waypoint + + + Detten Rockt + Detten Rockt + Detten Rockt + Waypoint + + diff --git a/testo b/testo index 2cd21ab78..e1331c81d 100755 --- a/testo +++ b/testo @@ -1288,6 +1288,10 @@ gpsbabel -i garmin_gpi -f ${TMPDIR}/garmin_gpi3a.gpi -o garmin_gpi -F ${TMPDIR}/ bincompare ${TMPDIR}/garmin_gpi3a.gpi ${TMPDIR}/garmin_gpi3b.gpi gpsbabel -i garmin_gpi -f ${REFERENCE}/gpi_ext-sample.gpi -o unicsv -F ${TMPDIR}/gpi_ext-sample.csv compare ${REFERENCE}/gpi_ext-sample.csv ${TMPDIR}/gpi_ext-sample.csv +# Don't test writing this sample file from garminonline.de/extras/poi, but +# prove we can read it +gpsbabel -i garmin_gpi -f ${REFERENCE}/umsonstdraussen.gpi -o gpx -F ${TMPDIR}/umsonstdraussen.gpx +compare ${REFERENCE}/umsonstdraussen.gpx ${TMPDIR}/umsonstdraussen.gpx # # Nokia LMX -- 2.30.2